/**************************************************************************************************
 * light library                                                                                  *
 * Copyright © 2012 David Kretzmer                                                                *
 *                                                                                                *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software  *
 * and associated documentation files (the "Software"), to deal in the Software without           *
 * restriction,including without limitation the rights to use, copy, modify, merge, publish,      *
 * distribute,sublicense, and/or sell copies of the Software, and to permit persons to whom the   *
 * Software is furnished to do so, subject to the following conditions:                           *
 *                                                                                                *
 * The above copyright notice and this permission notice shall be included in all copies or       *
 * substantial portions of the Software.                                                          *
 *                                                                                                *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING  *
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND     *
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.        *
 *                                                                                                *
 *************************************************************************************************/

#include "light/string/conversion.hpp"


namespace light
{
namespace string
{
	namespace internal
	{
		// Converts the formatting description in 'fmt' to a C-format using type 'type'
		char const* to_cfmt(char const *fmt, char const *type)
		{
			static char buffer[32] = {};
			buffer[0] = '%';
			buffer[1] = '\0';

			assert(*fmt == '{');
			++fmt;
			size_t fmt_len = strlen(fmt);
			char const *fmt_end = fmt + fmt_len;

			char const *closing_brace = ::std::find(fmt, fmt_end, '}');
			if(closing_brace == fmt_end)
				throw runtime_error("closing brace expected");

			assert((closing_brace - fmt) + strlen(type) <= 30);
			strncat(buffer, fmt, closing_brace - fmt);
			strcat(buffer, type);

			return buffer;
		}
	}

} // namespace: string
} // namespace: light
